<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Entidad_lst( $this );

	class Entidad_lst extends Lst
	{
	function Entidad_lst( &$oModule )
		{
			$this->Lst ( $oModule );
		}
	function initialize()
		{
			// Obtiene de su filtro los parametros que necesita para armar el query
			$oFiltro = $this->oModule->loadClass( 'entidad_frm' );
			$this->aFields = array_merge ( (array)$this->aFields,  (array)$oFiltro->getFieldArray() );
			$this->setTitle ( "Entidades" );
			$this->setSummary( "Esta tabla contiene las organizaciones, establecimientos y personas" );
			$this->addColumn ( 'Nombre', 'cdEntidad', true );
			$this->addColumn ( 'Tipo', 'cdTipoEntidad', true );
			$this->addColumn ( 'Agenda', 'cdGrupo' );
		}
	function open()
		{
			// Convierte a variables el aFields
				extract( $this->getFieldArray() );
				$cdEntidad = str_replace(  " ", "%", $cdEntidad ) ;
			// Primera Parte
				$cSqlA = "SELECT 1 as ncTipoEntidad, 'Organizacion' as cdTipoEntidad, Org.ncOrganizacion as ncEntidad, Org.cdOrganizacion as cdEntidad, Gru.cdGrupo
												FROM atOrganizacion as Org
												JOIN atGrupo as Gru
													ON Gru.ncGrupo = Org.ncGrupo ";
				$cSqlA .= armarJoin(	" JOIN atOrganizacionActividad as OAc ON OAc.ncOrganizacion = Org.ncOrganizacion AND OAc.ncActividad = $ncActividad" , $ncActividad );
				if ( $cdEntidad ) $this->oWhere->addExpression ( "cdOrganizacion", "cdOrganizacion LIKE '%$cdEntidad%'" );
				$this->oWhere->addExpression ( "Org.bBaja", "Org.bBaja = 0" );
				$cSqlA .= $this->oWhere->make();
			// Segunda Parte
				$this->oWhere->reset();
				$cSqlC = "SELECT 3 as ncTipoEntidad, 'Persona' as cdTipoEntidad, Per.ncPersona as ncEntidad, " . $this->oDatabase->dbConcat ( 'Per.cNombre' , "' '" , 'Per.cApellido' ) . "  as cdEntidad, Gru.cdGrupo
												FROM atPersona as Per
												JOIN atGrupo as Gru
													ON Gru.ncGrupo = Per.ncGrupo ";
				$cSqlC .= armarJoin(	" JOIN atOrganizacionPersona as OPe ON OPe.ncPersona = Per.ncPersona AND OPe.ncActividad = $ncActividad" , $ncActividad );
				if ( $cdEntidad ) $this->oWhere->addExpression ( "cdEntidad", " cApellido LIKE '%$cdEntidad%' OR cNombre LIKE '%$cdEntidad%' " );
				$this->oWhere->addExpression ( "Per.bBaja", "Per.bBaja = 0" );
				$cSqlC .= $this->oWhere->make();
			// Calcula la Cantidad de Total de Filas de la Consulta
				$this->oPaging->setTotalItems ( $this->oDatabase->total($cSqlA) + $this->oDatabase->total($cSqlC) );
			// Arma el Orden de la Consulta
				$cSql = $cSqlA . ' UNION ALL ' .  $cSqlC . $this->oPaging->getOrderBy();
			// Ejecuta la Consulta
				$this->oRecordset = $this->oDatabase->recordset($cSql , $this->oPaging->getFrom(), $this->oPaging->getLength() );
				return ( $this->oRecordset ) ? true: false;
		}
	function makeListActions()
		{
			$cParametroRegistro =  $this->getFieldString();
			if ( $this->aFields['ncPersona'] )
			{
				$this->addListAction ( AGREGAR_UN_CONTACTO_A_UNA_LISTA, $cParametroRegistro, 'I', VENTANA_SECUNDARIA);
			}
			if ( $this->aFields['ncLista'] )
			{
				$this->addListAction ( AGREGAR_UN_CONTACTO_A_UNA_LISTA, $cParametroRegistro, 'I', VENTANA_SECUNDARIA);
			}
		}
	function makeRowActions( $aRow )
		{
			switch( $aRow["ncTipoEntidad"] )
			{
				case ENTIDAD_ORGANIZACION:
					$cParametroRegistro = "ncOrganizacion=" . $aRow["ncEntidad"];
					$this->addRowAction ( VER_ORGANIZACION, $cParametroRegistro );
					break;
				case ENTIDAD_PERSONA:
					$cParametroRegistro = "ncPersona=" . $aRow["ncEntidad"];
					$this->addRowAction ( VER_PERSONA , $cParametroRegistro );
					break;
			}
		}
	}
?>
